#ifndef _MATRIX_KEYBOARD_CONFIG_H_
#define _MATRIX_KEYBOARD_CONFIG_H_

#include "components\io_chip_drivers\aw9523b\aw9523b.h"

// 定义表示启用转换键值，启用后需要提供一个返回 key_value_t 的转换函数。【未实现】
// 不定义时，键值的高4位表示触发行号，低4位表示触发列号，详见 key_coord_t 。
// #define _KEYBOARD_CONVERT_KEY_VALUE

// 几行
#define _KEYBOARD_HOR      2

// 几列
#define _KEYBOARD_VER      3

// 扫描模式
// 0 - 顺序扫行。所有行输出0，获取列值，然后顺序扫行确定行值，适用于行只能开漏输出或者无上拉的情况。
// 1 - 翻转法。所有行输出0，获取列值，然后所有列输出0，获取行值。【理论可以加快扫描速度，未实现】
#define _KEYBOARD_SCAN_MODE     0

// 消抖模式
// 0 - 不消抖。
// 1 - 标记法。做好标记10ms之后再次读取。【未实现】
// 2 - 延时法。直接延时一段时间再次读取。【未实现】
#define _KEYBOARD_FILTER_MODE   0

// 扫描间隔，单位ms
#define _KEYBOARD_SCAN_INTERVAL     30


// 需要实现的API


// 获取列值，8位对齐，未使用的位必须设置为1。
// key_ver_t _Keyboard_GetVer();
#define _Keyboard_GetVer()          ((AW9523B_GetP0()>>2)|0xF8)

// 设置行值，0-输出L，1-上拉输入或者高阻态
// void _Keyboard_SetHor(key_hor_t value);
#define _Keyboard_SetHor(value) \
{\
    AW9523B_SetP1Dir(_AW9523B_P1_ODR_DEFAULT & 0xCF | ((value) << 4));\
}

#endif
